** --------------------------------------- **
** Journal: Review of Religious Research   **
** Manuscript: Mobilizing Muslim Voters    **
** Data Analysis Replication Files         **
** Tested on Stata 19.0                    **
** --------------------------------------- **


clear all

*1) Create a folder with the a) dta file, b) averages csv file, and c) replication do file all in the same folder

*2) Change your directory to this folder
*cd "/Users/workcomputer/Desktop/replication files/" /*For instance if you are using a mac and you created a folder on your Desktop your directory might be something like this*/

*3) Upload using dataset
use "Final Paper Data File.dta"

*4) Make sure your packages are up to date. You will need to download packages for schemes (e.g., schemepack), eststo/esttab, coefplot, corrtex, latab/latabstat, etc. 


*5) Run the remainder of the code

**************
** Figure 1 **
**************

*Descriptives of contact by subgroups

su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged
su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged if republican ==1
su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged if democrat ==1
su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged if independent_other ==1
su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged if battleground ==1
su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged if battleground ==0


insheet using "averages.csv", clear /*insheeting a csv that we created with the means of all of these variables*/

gen v1_numeric =.
replace v1_numeric =1 if v1 == "Among All Muslims"
replace v1_numeric =2 if v1 == "Among Muslim Republicans"
replace v1_numeric =3 if v1 == "Among Muslim Democrats"
replace v1_numeric =4 if v1 == "Among Muslim Independents"
replace v1_numeric =5 if v1 == "Among Muslims in battleground states"
replace v1_numeric =6 if v1 == "Among Muslims not in battleground states"

 label define v1_numeric 1 "Among All Muslims" 2 "Among Muslim Republicans" 3 "Among Muslim Democrats" 4 "Among Muslim Independents" 5 "Among Muslims in battleground states" 6 "Among Muslims not in battleground states" 
	 label values v1_numeric  v1_numeric
	 label var v1_numeric "CMPS groups"
	

set scheme tab3
graph bar contactedbyrepublicanside contactedbydemocraticside contactedbycommunityorgs contactedbyany, over (v1_numeric,  relabel(1 "Among All Muslims" 2 "Among Muslim Republicans" 3 "Among Muslim Democrats" 4 "Among Muslim Independents" 5 "Among Muslims in battleground states" 6 "Among Muslims not in battleground states" ) label(angle(45) labsize(small)))  scheme(tab3) plotregion(fcolor(white)) graphregion(fcolor(white)) intensity(55) ///
ytitle("") blabel(bar, position(top) format(%9.2f) color(black) size(vsmall)) ///
title("") yscale(range(0 0.55) titlegap(.1)) scale(1) ///
caption("")  legend(label(1 "Republican Campaign Contact") label(2 "Democratic Campaign Contact") label(3 "Community Organization Contact") label(4 "Contact by Any Group")) ysize(20) xsize (20) ytitle("Unweighted Averages")

	
	

graph save Graph "figure1.gph", replace
graph export "figure1.pdf", as(pdf) name("Graph") replace
		
	


*************
** Table 1 **
*************	

*Predictors of Campaign contact, who is contacted?

use "Final Paper Data File.dta", clear

eststo clear

eststo: quietly reg  campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg  campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims  battleground  [aweight = weight]
eststo: quietly reg  campaign_contact_comm i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg  campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg  campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]

esttab,  se ar2 b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Reps" "Dems" "Community" "Additive Contact")  drop( _cons )    addnotes("These models control for race, age, gender, education, income, partisanship, political interest, racial resentment, and religiosity.") nobaselevels label  

esttab using "table1.tex", se ar2 b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Contact by Republicans" "Contact by Democrats" "Contact by Community Orgs" "Any Campaign Contact" "Additive Contact")  drop( _cons )   addnotes("Note: All variables have been rescaled to range from 0-1.")  nobaselevels label   replace



**************
** Figure 2 **
**************

set scheme tab3
graph hbar (mean) campaign_contact_home campaign_contact_phone campaign_contact_text campaign_contact_email campaign_contact_mail campaign_contact_sm campaign_contact_street  ///
    , by(battleground) ascat label ///
    plotregion(fcolor(white)) graphregion(fcolor(white)) ///
    bar(1, color(purple)) bar(2, color(red)) bar(3, color(pink)) ///
    bar(4, color(orange)) bar(5, color(blue)) bar(6, color(green))  ///
    blabel(bar, format(%4.2f)) ///
    intensity(15) ///
    yvaroptions(relabel(1 "Home" 2 "Phone" 3 "Text" 4 "Mail" 5 "Email" 6 "Social Media" 7 "Street" )) ///
    yscale(range(0(0.25).5) titlegap(1)) ///
    scale(0.9) scheme(tab3) ///
    ytitle("") 

	
	graph save Graph "form_battleground.gph", replace
	

set scheme tab3
graph hbar (mean) campaign_contact_home campaign_contact_phone campaign_contact_text campaign_contact_email campaign_contact_mail campaign_contact_sm campaign_contact_street  ///
    , by(polinterested_bi) ascat label ///
    plotregion(fcolor(white)) graphregion(fcolor(white)) ///
    bar(1, color(purple)) bar(2, color(red)) bar(3, color(pink)) ///
    bar(4, color(orange)) bar(5, color(blue)) bar(6, color(green))  ///
    blabel(bar, format(%4.2f)) ///
    intensity(15) ///
    yvaroptions(relabel(1 "Home" 2 "Phone" 3 "Text" 4 "Mail" 5 "Email" 6 "Social Media" 7 "Street"  )) ///
    yscale(range(0(0.25).5) titlegap(1)) ///
    scale(0.9) scheme(tab3) ///
    ytitle("") 
	graph save Graph "form_polint.gph", replace


	graph combine form_battleground.gph form_polint.gph, xcommon row(2) graphregion(fcolor(white)) 

	graph export "figure2.pdf", as(pdf) name("Graph") replace
	graph export "figure2.png", as(png) name("Graph") replace
	
	


*************
** Table 2 **
*************

** Is contact related to voting?

eststo clear

eststo: quietly reg voted2020 campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground  [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_comm i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]

esttab, se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Voted 2020" "Voted 2020"  "Voted 2020"   "Voted 2020""Voted 2020" )  drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ polinterest rr_scale religiosity lf_muslims battleground)    addnotes("") nobaselevels label   

esttab  using "table2.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Voted 2020" "Voted 2020"  "Voted 2020"  "Voted 2020" "Voted 2020")  drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ polinterest rr_scale religiosity lf_muslims battleground)     addnotes("Note: Models include controls and all variables have been rescaled to range from 0-1.")  nobaselevels label   replace





*************
** Table 3 **
*************

** Is contact related to voting? among politically interested and not?

eststo clear

eststo: quietly reg voted2020 campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg voted2020 campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0

eststo: quietly reg voted2020 campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground  [aweight = weight] if polinterested_bi ==1
eststo: quietly reg voted2020 campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground  [aweight = weight] if polinterested_bi ==0

eststo: quietly reg voted2020 campaign_contact_comm i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg voted2020 campaign_contact_comm i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0

eststo: quietly reg voted2020 campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg voted2020 campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0

eststo: quietly reg voted2020 campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg voted2020 campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0


esttab, se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Yes" "No" "Yes" "No" "Yes" "No" "Yes" "No" "Yes" "No")  drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ rr_scale religiosity lf_muslims battleground)    addnotes("") nobaselevels label   

esttab  using "table3.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Yes" "No" "Yes" "No" "Yes" "No" "Yes" "No" "Yes" "No")  drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ  rr_scale religiosity lf_muslims battleground)     addnotes("Note: Models include controls and all variables have been rescaled to range from 0-1.")  nobaselevels label   replace

	
	
*************
** Table 4 **
*************

*Association between campaign contact methods and voting in the 2020 presidential election
	
eststo clear

eststo: quietly reg voted2020  campaign_contact_home  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  campaign_contact_phone  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  campaign_contact_text  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  campaign_contact_email  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]		
eststo: quietly reg voted2020  campaign_contact_mail  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  campaign_contact_sm  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  campaign_contact_street  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020  cc_forms_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]		
eststo: quietly reg voted2020  cc_forms_add campaign_contact_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	

esttab, se ar2 b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001)  drop( _cons) mtitles() nobaselevels order(campaign_contact_home campaign_contact_phone campaign_contact_text campaign_contact_email campaign_contact_mail campaign_contact_sm campaign_contact_street cc_forms_add) label   replace
	
esttab using "table4.tex", se ar2 order(campaign_contact_home campaign_contact_phone campaign_contact_text campaign_contact_email campaign_contact_mail  campaign_contact_sm campaign_contact_street cc_forms_add campaign_contact_add ) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001)  mtitles( "Voted" "Voted" "Voted" "Voted" "Voted" "Voted" "Voted" "Voted" "Voted"  )   drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ  rr_scale religiosity lf_muslims battleground polinterest)     addnotes("Note: Models include controls and all variables have been rescaled to range from 0-1.")     postfoot("Controls &  \checkmark& \checkmark& \checkmark& \checkmark& \checkmark& \checkmark& \checkmark&\\ \bottomrule \multicolumn{8}{l}{\footnotesize Standard errors in parentheses}\\ \multicolumn{8}{l}{\footnotesize Note: Models include controls and all variables have been rescaled to range from 0-1.}\\ \multicolumn{8}{l}{\footnotesize \sym{+} \(p<0.10\), \sym{*} \(p<0.05\), \sym{**} \(p<0.01\), \sym{***} \(p<0.001\)}\\ \end{tabular}}") nobaselevels label   replace 
	


*************
** Table 5 **
*************

** Is contact related to non-voting political behaviors?

eststo clear

eststo: quietly reg nvpp_index campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_comm i.resp_race_num female age immigrant democrat independent educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]

esttab, se ar2 order( campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Non-Voting Index" "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index" "Non-Voting Index" )  drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ polinterest rr_scale religiosity lf_muslims battleground)    addnotes("") nobaselevels label   replace

esttab using "table5.tex", se ar2 order( campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("\shortstack{Non-Voting\\ Index}" "\shortstack{Non-Voting\\ Index}"  "\shortstack{Non-Voting\\ Index}"  "\shortstack{Non-Voting \\Index}" "\shortstack{Non-Voting \\Index}")  drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ polinterest rr_scale religiosity lf_muslims battleground)     addnotes("Note: Models include controls and all variables have been rescaled to range from 0-1.")  nobaselevels label   replace






**************
** Figure 3 **
**************

** Is contact effective at rendering support for a particular candidate in 2020? 
* Association bw contact and voting / Biden v. Trump support

eststo clear		

quietly eststo modelA1: reg trump2020support campaign_contact_rep i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store A1

quietly eststo modelA2: reg trump2020support campaign_contact_dem i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store A2

quietly eststo modelB1: reg biden2020support campaign_contact_rep i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store B1

quietly eststo modelB2: reg biden2020support campaign_contact_dem  i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store B2

esttab, se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add)  b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020" "Biden 2020" "Biden 2020" "Biden 2020" "Biden 2020")  drop( _cons )    addnotes("") nobaselevels label   replace

						
coefplot (A1,  pstyle(p1) label("Republican Campaign Contact")) (A2,  pstyle(p2) label("Democratic Campaign Contact")), bylabel("Trump 2020 Support" ) ///
||(B1,  pstyle(p1) label("Republican Campaign Contact")) (B2,  pstyle(p2) label("Democratic Campaign Contact")), bylabel("Biden 2020 Support" ) ///
coeflabels(,labsize(small))  ///
ciopts(recast(rcap))  legend(size(vsmall))  legend(rows(2)) ///
 scheme(tab3) byopts(cols(3)) ///
plotlabels()  level(90)  /// 
graphregion(color(white)) drop(_cons  *.resp_race_num female age immigrant democrat independent_other income educ polinterest rr_scale religiosity lf_muslims battleground) ///
xline(0)  mlabposition(1) mlabgap(*2) ///
mlabel("{it:p} = " + string(@pval,"%9.3f")) 


graph save Graph "figure3.gph", replace
graph export "figure3.pdf", as(pdf) name("Graph") replace
		
	


**************
** Figure 4 **
**************

*Association between campaign contact and candidate support in 2020, among subgroups

**Trump support
eststo clear

quietly eststo modelA0: reg trump2020support campaign_contact_rep campaign_contact_dem  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store All

quietly eststo modelA1: reg trump2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if republican ==1 [aweight = weight]
estimates store Republicans

quietly eststo modelA2: reg trump2020support campaign_contact_rep  campaign_contact_dem  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  democrat ==1 [aweight = weight]
estimates store Democrats
	
quietly eststo modelA3: reg trump2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  independent_other ==1 [aweight = weight]
estimates store Independents
	
quietly eststo modelA4: reg trump2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  female ==1 [aweight = weight]
estimates store Females

quietly eststo modelA5: reg trump2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  male ==1 [aweight = weight]
estimates store Males
	
quietly eststo modelA6: reg trump2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground  if  battleground ==1 [aweight = weight]
estimates store Battleground
	
quietly eststo modelA7: reg trump2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims  battleground if  battleground ==0 [aweight = weight]
estimates store Non_Battleground
	
		
set scheme  tab3
coefplot (All \ Republicans \ Democrats \ Independents \ Females \ Males \ Battleground \Non_Battleground ), xline(0) drop(_cons  *.resp_race_num female age immigrant democrat independent_other income educ polinterest rr_scale religiosity lf_muslims battleground ) aseq  		title("", span size(medium)) ytitle("", size(small)) graphregion(color(white))xscale(range(-0.3 0.3)) xtick( -0.2(0.1)0.3 ) xlabel( -0.2(0.1)0.3 ) xtitle("", size(small)) scale(0.75)  byopts(cols(3)) title("Trump 2020 Support") plotlabels()  level(90)  grid(none) legend(off)
		
graph save Graph "fig4a_weighted.gph", replace



* Biden Support
eststo clear
quietly eststo modelA0: reg biden2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground  [aweight = weight]
estimates store All
	
quietly eststo modelA1: reg biden2020support campaign_contact_rep campaign_contact_dem  i.resp_race_num female age immigrant democrat independent_other income educ polinterest rr_scale religiosity lf_muslims battleground if  republican ==1 [aweight = weight] 
estimates store Republicans

quietly eststo modelA2: reg biden2020support campaign_contact_rep  campaign_contact_dem  i.resp_race_num female age immigrant democrat independent_other income educ polinterest rr_scale religiosity lf_muslims battleground if democrat ==1 [aweight = weight]
estimates store Democrats
	
quietly eststo modelA3: reg biden2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other income educ polinterest rr_scale religiosity lf_muslims battleground if independent_other ==1 [aweight = weight]
estimates store Independents
	
quietly eststo modelA4: reg biden2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other income educ polinterest rr_scale religiosity lf_muslims battleground if female ==1 [aweight = weight]
estimates store Females

quietly eststo modelA5: reg biden2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other income educ polinterest rr_scale religiosity lf_muslims battleground if  male ==1 [aweight = weight]
estimates store Males
	
quietly eststo modelA6: reg biden2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other income educ polinterest rr_scale religiosity lf_muslims battleground if  battleground ==1 [aweight = weight]
estimates store Battleground
	
quietly eststo modelA7: reg biden2020support campaign_contact_rep campaign_contact_dem   i.resp_race_num female age immigrant democrat independent_other income educ polinterest rr_scale religiosity lf_muslims battleground if  battleground ==0 [aweight = weight]
estimates store Non_Battleground
	


coefplot (All \ Republicans \ Democrats \ Independents \ Females \ Males \ Battleground \Non_Battleground ), xline(0) drop(_cons  *.resp_race_num female age immigrant democrat independent_other income educ polinterest rr_scale religiosity lf_muslims battleground ) aseq  		title("", span size(medium)) ytitle("", size(small)) graphregion(color(white))xscale(range(-0.3 0.3)) xtick( -0.2(0.1)0.3 ) xlabel( -0.2(0.1)0.3 ) xtitle("", size(small)) scale(0.75) scheme(tab3) byopts(cols(3)) title("Biden 2020 Support") plotlabels()  level(90) grid(none)  
		
graph save Graph "fig4b_weighted.gph", replace


gr combine fig4a_weighted.gph fig4b_weighted.gph, ycommon xcommon graphregion(color(white))


graph save Graph "figure4.gph", replace
graph export "figure4.pdf", as(pdf) name("Graph") replace
		
	
*****************************************************************************
*****************************************************************************
*****							APPENDIX 								*****	
*****************************************************************************
*****************************************************************************


**************
** Table A1 **
**************

* Summary statistics 

* Unweighted
latabstat trump2020support biden2020support voted2020 nvpp_index nvpp_index_unchanged  campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add  campaign_contact_add_unchanged campaign_contact_home campaign_contact_phone campaign_contact_text campaign_contact_email campaign_contact_sm campaign_contact_mail campaign_contact_street cc_forms_add_unchanged mena black white asian latino otherrace female male age age_unchanged income income_unchanged  educ  educ_unchanged immigrant republican democrat independent_other battleground polinterest polinterest_unchanged rr_scale rr_scale_unchanged religiosity religiosity_unchanged lf_muslims lf_muslims_unchanged , stat(mean sd min max count) col(stat) format(%9.2g) long 

*Weighted
latabstat trump2020support biden2020support voted2020 nvpp_index nvpp_index_unchanged  campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add  campaign_contact_add_unchanged campaign_contact_home campaign_contact_phone campaign_contact_text campaign_contact_email campaign_contact_sm campaign_contact_mail campaign_contact_street cc_forms_add_unchanged  mena black white asian latino otherrace   female male age age_unchanged income income_unchanged  educ  educ_unchanged immigrant republican democrat independent_other battleground polinterest polinterest_unchanged rr_scale rr_scale_unchanged religiosity religiosity_unchanged lf_muslims lf_muslims_unchanged [aweight = weight], stat(mean sd min max count) col(stat) format(%9.2g) long 


**************
** Table A2 **
**************

* Correlation Table 
corrtex campaign_contact_dem campaign_contact_rep campaign_contact_comm , file("tablea2.tex") replace
 

**************
** Table A3 **
**************
* Corresponds to Figure 1 - Descriptive statistics

su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged 
su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged if  republican==1
su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged if democrat==1
su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged if independent_other==1
su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged if battleground ==1
su campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add_unchanged if battleground ==0


**************
** Table A4 **
**************

*Predictors of contact, who is contacted? Refers to Table 1 with income controls

eststo clear
eststo: quietly reg  campaign_contact_rep i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg  campaign_contact_dem i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground  [aweight = weight]
eststo: quietly reg  campaign_contact_comm i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground  [aweight = weight]
eststo: quietly reg  campaign_contact_any i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg  campaign_contact_add i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]

esttab,  se ar2 b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Reps" "Dems" "Community" "Any Contact" "Additive Contact")  drop( _cons )    addnotes("These models control for race, age, gender, education, income, partisanship, political interest, racial resentment, and religiosity.") nobaselevels label   replace

esttab using "tablea4.tex", se ar2 b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Contact by Republicans" "Contact by Democrats" "Contact by Community Orgs" "Any Campaign Contact" "Additive Contact")  drop( _cons )  addnotes("Note: All variables have been rescaled to range from 0-1.") nobaselevels label   replace


**************
** Table A5 **
**************

*** Predictors of contact, who is contacted, by high and low political interest
eststo clear
eststo: quietly reg  campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg  campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0

eststo: quietly reg  campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims  battleground  [aweight = weight] if polinterested_bi ==1
eststo: quietly reg  campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims  battleground  [aweight = weight] if polinterested_bi ==0

eststo: quietly reg  campaign_contact_comm i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg  campaign_contact_comm i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0

eststo: quietly reg  campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg  campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0

eststo: quietly reg  campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg  campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0

esttab,  se ar2 b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Reps" "Reps" "Dems" "Dems"  "Community" "Community" "Any" "Any" "Additive" "Additive")  drop( _cons )    addnotes("These models control for race, age, gender, education, income, partisanship, political interest, racial resentment, and religiosity.") nobaselevels label   replace

esttab using "tablea5.tex", se ar2 b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001)  mtitles("RCC, HPI" "RCC, LPI" "DCC, HPI" "DCC, LPI" "CCC, HPI" "CCC, LPI" "ACC, HPI" "ACC, LPI" "ADD, HPI" "ADD, LPI")   drop( _cons )   addnotes("Note: All variables have been rescaled to range from 0-1.")  nobaselevels label   replace




**************
** Table A6 **
**************

*Refers to Table 2 without income **

eststo clear
eststo: quietly reg voted2020 campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_comm i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]

esttab, se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Voted 2020" "Voted 2020"  "Voted 2020"  "Voted 2020" "Voted 2020" )  drop( _cons )    addnotes("") nobaselevels label   replace

esttab  using "tablea6.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Voted 2020" "Voted 2020"  "Voted 2020"  "Voted 2020" "Voted 2020" )  drop( _cons )     addnotes("Note: All variables have been rescaled to range from 0-1.")  nobaselevels label   replace



**************
** Table A7 **
**************

*Refers to Table 2 with income control 

eststo clear
eststo: quietly reg voted2020 campaign_contact_rep i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_dem i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_comm i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_any i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg voted2020 campaign_contact_add i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]

esttab, se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Voted 2020" "Voted 2020"  "Voted 2020"  "Voted 2020" "Voted 2020" )  drop( _cons )    addnotes("") nobaselevels label   replace

esttab using "tablea7.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Voted 2020" "Voted 2020"  "Voted 2020"  "Voted 2020" "Voted 2020" )  drop( _cons )    addnotes("Note: All variables have been rescaled to range from 0-1.")  nobaselevels label   replace



**************
** Table A8 **
**************

*Refers to Table 3, full models, which subsets Table 2 by political interest

eststo clear
eststo: quietly reg voted2020 campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg voted2020 campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0

eststo: quietly reg voted2020 campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground  [aweight = weight] if polinterested_bi ==1
eststo: quietly reg voted2020 campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground  [aweight = weight] if polinterested_bi ==0

eststo: quietly reg voted2020 campaign_contact_comm i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg voted2020 campaign_contact_comm i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0

eststo: quietly reg voted2020 campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg voted2020 campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0

eststo: quietly reg voted2020 campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==1
eststo: quietly reg voted2020 campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ  rr_scale religiosity lf_muslims battleground [aweight = weight] if polinterested_bi ==0


esttab, se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Yes" "No" "Yes" "No" "Yes" "No" "Yes" "No" "Yes" "No")  drop( _cons )    addnotes("") nobaselevels label   replace

esttab  using "tablea8.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Yes" "No" "Yes" "No" "Yes" "No" "Yes" "No" "Yes" "No")  drop( _cons)     addnotes("Note: Models include controls and all variables have been rescaled to range from 0-1.")  nobaselevels label   replace



***************
** Figure A1 **
***************

*Figure A1A -- interacting political interest (unchanged) and any campaign contact
reg voted2020 i.polinterest_unchanged##i.campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ rr_scale religiosity lf_muslims battleground [aweight = weight], r

* Generate predicted values
quietly margins, at(polinterest_unchanged=(1(1)4) campaign_contact_any=(0 1))

* Plot the results
marginsplot, plot1opts(lcolor(black) mcolor(black)) ///
               ylabel(, angle(horizontal)) ///
               xlabel(, angle(vertical)) graphregion(color(white))  ///
			   title("", size(small)) ///
			   xtitle ("Political Interest", size(medium)) ytitle ("Voting", size(medium)) ///
			   legend(size(vsmall))  scheme(tab3) scale(0.6)

graph save Graph "figure_a1a.gph", replace
graph export "figure_a1a.pdf", as(pdf) name("Graph") replace
	

		
*Figure A1B -- interacting political interest (unchanged) and additive campaign contact
reg voted2020 i.polinterest_unchanged##i.campaign_contact_add_unchanged i.resp_race_num female age immigrant democrat independent  educ rr_scale religiosity lf_muslims battleground [aweight = weight], r

* Generate predicted values
quietly margins, at(polinterest_unchanged=(1(1)4) campaign_contact_add_unchanged=(0 3))

* Plot the results
marginsplot, plot1opts(lcolor(black) mcolor(black)) ///
               ylabel(, angle(horizontal)) ///
               xlabel(, angle(vertical)) graphregion(color(white))  ///
			   title("", size(small)) ///
			   xtitle ("Political Interest", size(medium)) ytitle ("Voting", size(medium)) ///
			   legend(size(vsmall))  scheme(tab3) scale(0.6)

graph save Graph "figure_a1b.gph", replace
graph export "figure_a1b.pdf", as(pdf) name("Graph") replace	

	
		
**************
** Table A9 **
**************

*Refers to Table 4, Association between campaign contact methods and voting in the 2020 presidential election
	
eststo clear
eststo: quietly reg voted2020  campaign_contact_home  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  campaign_contact_phone  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  campaign_contact_text  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  campaign_contact_email  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]		
eststo: quietly reg voted2020  campaign_contact_mail  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  campaign_contact_sm  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]		
eststo: quietly reg voted2020  campaign_contact_street  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	

eststo: quietly reg voted2020  cc_forms_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  cc_forms_add campaign_contact_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	

esttab, se ar2 b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001)  drop( _cons) mtitles() nobaselevels order(campaign_contact_home campaign_contact_phone campaign_contact_text campaign_contact_email campaign_contact_mail campaign_contact_sm campaign_contact_street  cc_forms_add campaign_contact_add) label   
	
esttab  using "tablea9.tex", se ar2 order(campaign_contact_home campaign_contact_phone campaign_contact_text campaign_contact_email campaign_contact_mail  campaign_contact_sm campaign_contact_street cc_forms_add campaign_contact_add)b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles( "Voted" "Voted" "Voted" "Voted" "Voted" "Voted" "Voted"  "Voted" "Voted")   drop( _cons )     addnotes("Note: Models include controls and all variables have been rescaled to range from 0-1.")  nobaselevels label   replace 
	


***************
** Table A10 **
***************	

*Additive campaign forms and additive campaign sources on voter turnout	
	
eststo clear	   
eststo: quietly reg voted2020  cc_forms_add  [aweight = weight]		   
eststo: quietly reg voted2020  cc_forms_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground  [aweight = weight]		   
eststo: quietly reg voted2020  campaign_contact_add	[aweight = weight]		  	   
eststo: quietly reg voted2020  campaign_contact_add	 i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground  [aweight = weight]		  	   
eststo: quietly reg voted2020  cc_forms_add campaign_contact_add  [aweight = weight]		  	
eststo: quietly reg voted2020  cc_forms_add campaign_contact_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground  [aweight = weight]	
	  	
esttab, se ar2 order(cc_forms_add campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles( )  drop( _cons)    addnotes("") nobaselevels label   replace
		 
		   
esttab using "tablea10.tex", se ar2 order(cc_forms_add campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001)  mtitles("Voted" "Voted" "Voted" "Voted" "Voted" "Voted")  addnotes("Note: Models include controls and all variables have been rescaled to range from 0-1.")  nobaselevels label   replace 		   
	
	
	
***************
** Table A11 **
***************		   
	
*Additive forms of contact and voting based on campaign contact source
	
eststo clear
eststo: quietly reg voted2020  cc_forms_add [aweight = weight]	
eststo: quietly reg voted2020  cc_forms_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]	
eststo: quietly reg voted2020  cc_forms_add if campaign_contact_any==1 [aweight = weight]	
eststo: quietly reg voted2020  cc_forms_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground if campaign_contact_any==1 [aweight = weight]	
eststo: quietly reg voted2020  cc_forms_add if campaign_contact_rep ==1  [aweight = weight]	
eststo: quietly reg voted2020  cc_forms_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground  if campaign_contact_rep ==1 [aweight = weight]	
eststo: quietly reg voted2020  cc_forms_add if campaign_contact_dem ==1 [aweight = weight]	
eststo: quietly reg voted2020  cc_forms_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground if campaign_contact_dem ==1 [aweight = weight]	
eststo: quietly reg voted2020  cc_forms_add if campaign_contact_comm ==1 [aweight = weight]	
eststo: quietly reg voted2020  cc_forms_add  i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground if campaign_contact_comm ==1 [aweight = weight]	

esttab, se ar2 order(cc_forms_add_unchanged ) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001)  drop( _cons) mtitles("All" " All" "ACC" " ACC" "RCC" "RCC" "DCC" "DCC" "CCC" "CCC") nobaselevels label   replace

	
esttab using "tablea11.tex", se ar2 order(cc_forms_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001)  mtitles("\shortstack{Voted\\All}" "\shortstack{Voted\\All}" "\shortstack{Voted\\ACC}" "\shortstack{Voted\\ACC}" "\shortstack{Voted\\RCC}" "\shortstack{Voted\\RCC}" "\shortstack{Voted\\DCC}" "\shortstack{Voted\\DCC}" "\shortstack{Voted\\CCC}" "\shortstack{Voted\\CCC}")  addnotes("Note: Models include controls and all variables have been rescaled to range from 0-1.")  nobaselevels label   replace 

	

***************
** Table A12 **
***************			
	
*Refers to Table 5 without income 

eststo clear

eststo: quietly reg nvpp_index campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_comm i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]

esttab, se ar2 order( campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Non-Voting Index" "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index" "Non-Voting Index" )  drop( _cons )    addnotes("") nobaselevels label   

esttab  using "tablea12.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Non-Voting Index" "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index" "Non-Voting Index" )  drop( _cons )    addnotes("Note: All variables have been rescaled to range from 0-1.")  nobaselevels label   replace



***************
** Table A13 **
***************

*Refers to Table 5 with income 

eststo clear

eststo: quietly reg nvpp_index campaign_contact_rep i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_dem i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_comm i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_any i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index campaign_contact_add i.resp_race_num female age immigrant democrat independent income educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]

esttab, se ar2 order( campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Non-Voting Index" "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index" "Non-Voting Index" )  drop( _cons )    addnotes("") nobaselevels label   

esttab  using "tablea13.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Non-Voting Index" "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index" "Non-Voting Index" )  drop( _cons )    addnotes("Note: All variables have been rescaled to range from 0-1.")  nobaselevels label   replace


	
	
***************
** Table A14 **
***************  
		   
** NVPP Alternative Specifications	(1, dropping two items)	   

eststo clear

eststo: quietly reg nvpp_index_alt campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index_alt campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index_alt campaign_contact_comm i.resp_race_num female age immigrant democrat independent educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index_alt campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index_alt campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]

esttab, se ar2 order( campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Non-Voting Index" "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index" "Non-Voting Index" )  drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ polinterest rr_scale religiosity lf_muslims battleground)    addnotes("") nobaselevels label   

esttab  using "tablea14.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Non-Voting Index" "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index"  )  drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ polinterest rr_scale religiosity lf_muslims battleground)     addnotes("Note: Models include controls and all variables have been rescaled to range from 0-1.")  nobaselevels label   replace

		   
	  
***************
** Table A15 **
***************

** NVPP Alternative Specifications	(2, binary for any)	 
  
eststo clear

eststo: quietly reg nvpp_index_alt_any campaign_contact_rep i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index_alt_any campaign_contact_dem i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index_alt_any campaign_contact_comm i.resp_race_num female age immigrant democrat independent educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index_alt_any campaign_contact_any i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
eststo: quietly reg nvpp_index_alt_any campaign_contact_add i.resp_race_num female age immigrant democrat independent  educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]

esttab, se ar2 order( campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Non-Voting Index" "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index" "Non-Voting Index" )  drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ polinterest rr_scale religiosity lf_muslims battleground)    addnotes("") nobaselevels label   

esttab  using "tablea15.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Non-Voting Index" "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index"  "Non-Voting Index"  )  drop( _cons  *.resp_race_num female age immigrant democrat independent_other  educ polinterest rr_scale religiosity lf_muslims battleground)     addnotes("Note: Models include controls and all variables have been rescaled to range from 0-1.")  nobaselevels label   replace

		   
		   
		  
***************
** Table A16 **
***************

*Refers to Figure 3, without income controls

eststo clear		
quietly eststo modelA1: reg trump2020support campaign_contact_rep i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store A1

quietly eststo modelA2: reg trump2020support campaign_contact_dem i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store A2

quietly eststo modelA3: reg trump2020support campaign_contact_comm i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store A3

quietly eststo modelA4: reg trump2020support campaign_contact_any i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store A4

quietly eststo modelA5: reg trump2020support campaign_contact_add i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store A5

quietly eststo modelB1: reg biden2020support campaign_contact_rep i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store B1

quietly eststo modelB2: reg biden2020support campaign_contact_dem  i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store B2

quietly eststo modelB3: reg biden2020support campaign_contact_comm i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store B3

quietly eststo modelB4: reg biden2020support campaign_contact_any i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store B4

quietly eststo modelB5: reg biden2020support campaign_contact_add i.resp_race_num female age immigrant democrat independent_other educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store B5


esttab, se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add)  b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Trump 2020" "Trump 2020"  "Trump 2020" "Trump 2020" "Trump 2020"  "Biden 2020"  "Biden 2020" "Biden 2020" "Biden 2020" "Biden 2020")  drop( _cons )    addnotes("") nobaselevels label   

esttab  using "tablea16.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm campaign_contact_any campaign_contact_add) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020"  "Biden 2020" "Biden 2020"  "Biden 2020" "Biden 2020" "Biden 2020")  drop( _cons )   addnotes("Note: All variables have been rescaled to range from 0-1.")  nobaselevels label   replace


  
***************
** Table A17 **
***************

*Refers to Figure 4- Trump support portion

eststo clear

quietly eststo modelA0: reg trump2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store All

quietly eststo modelA1: reg trump2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if republican ==1 [aweight = weight]
estimates store Republicans

quietly eststo modelA2: reg trump2020support campaign_contact_rep  campaign_contact_dem campaign_contact_comm i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  democrat ==1 [aweight = weight]
estimates store Democrats
	
quietly eststo modelA3: reg trump2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if independent_other ==1 [aweight = weight]
estimates store Independents
	
quietly eststo modelA4: reg trump2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  female ==1 [aweight = weight]
estimates store Females

quietly eststo modelA5: reg trump2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  male ==1 [aweight = weight]
estimates store Males
	
quietly eststo modelA6: reg trump2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if battleground ==1 [aweight = weight]
estimates store Battleground
	
quietly eststo modelA7: reg trump2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  battleground ==0 [aweight = weight]
estimates store Non_Battleground
	
esttab, se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm)  b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020")  drop( _cons )    addnotes("") nobaselevels label   


esttab  using "tablea17.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020" "Trump 2020")  drop( _cons )   addnotes("Note: All variables have been rescaled to range from 0-1.")  nobaselevels label   replace



***************
** Table A18 **
***************

*Refers to Figure 4- Biden support portion

eststo clear

quietly eststo modelA0: reg biden2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground [aweight = weight]
estimates store All

quietly eststo modelA1: reg biden2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if republican ==1 [aweight = weight]
estimates store Republicans

quietly eststo modelA2: reg biden2020support campaign_contact_rep  campaign_contact_dem campaign_contact_comm i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  democrat ==1 [aweight = weight]
estimates store Democrats
	
quietly eststo modelA3: reg biden2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  independent_other ==1 [aweight = weight]
estimates store Independents
	
quietly eststo modelA4: reg biden2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  female ==1 [aweight = weight]
estimates store Females

quietly eststo modelA5: reg biden2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  male ==1 [aweight = weight]
estimates store Males
	
quietly eststo modelA6: reg biden2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  battleground ==1 [aweight = weight]
estimates store Battleground
	
quietly eststo modelA7: reg biden2020support campaign_contact_rep campaign_contact_dem campaign_contact_comm  i.resp_race_num female age immigrant democrat independent_other   educ polinterest rr_scale religiosity lf_muslims battleground if  battleground ==0 [aweight = weight]
estimates store Non_Battleground

	
esttab, se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm)  b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Biden 2020" "Biden 2020" "Biden 2020" "Biden 2020" "Biden 2020" "Biden 2020" "Biden 2020")  drop( _cons )    addnotes("") nobaselevels label   replace

esttab  using "tablea18.tex", se ar2 order(campaign_contact_rep campaign_contact_dem campaign_contact_comm) b(3) star(+ 0.10 * 0.05 ** 0.01 *** 0.001) mtitles("Biden 2020" "Biden 2020" "Biden 2020" "Biden 2020" "Biden 2020" "Biden 2020" "Biden 2020")   drop( _cons )  addnotes("Note: Income is not included in these models") nobaselevels label   replace


	

	